
#ifndef _TTG_THREADS_TASKS_
#define _TTG_THREADS_TASKS_
#include "Common/Definitions.h"

#include "Common/Structures.h"
#include <vector>

namespace ttg_internal
{
	namespace threads
	{
		//Base class for any task. Contains basic information about task.
		class Task
		{
			public:
				//Performs current task.
				//Can produce additional tasks, that should be performed by current performer.
				virtual void perform(std::vector<Task *> &produced_tasks) = 0;
				//For descendants only.
				virtual ~Task()
				{ /*nothing*/ }
		};
	}
}

namespace ttg
{
	namespace threads
	{
		typedef ttg_internal::threads::Task Task;
	}
}

#endif
